package com.形为型模式.观察者模式;


import java.util.ArrayList;
import java.util.List;

/**
 * 公司  抽象观者者
 */
interface Company{
    void response(int number);
}
/**
 * 具体观察者 进口公司
 */
class ImportCompany implements Company{
    @Override
    public void response(int number) {
        if(number > 0){
            System.out.println("汇率长高，进口公司利润也长高");
        }else{
            System.out.println("汇率降低，进口公司利润降低");
        }
    }
}
class ExportCompany implements Company{

    @Override
    public void response(int number) {
        if(number > 0 ){
            System.out.println("汇率长高，出口公司利润降低");
        }
        else{
            System.out.println("汇率降低，出口公司利润长高");
        }
    }
}

/**
 * 抽象目标： 汇率
 */
abstract class Rate{
   List<Company> companies = new ArrayList<>();
   void add(Company company){
       companies.add(company);
   }
   void remove(Company company){
       companies.remove(company);
   }
   abstract void change(int number);

}

/**
 * 具体目标：人民币汇率
 */
class RMBrate extends Rate{
    @Override
    void change(int number) {
        for(Object o:companies){
            ((Company)o).response(number);
        }
    }
}

/**
 * 观者者模式 - 人民币的汇率对进出口公司的影响
 */
public class ObserveMoney {
    public static void main(String[] args) {
       Rate rate = new RMBrate();
       Company c1 = new ImportCompany();
       Company c2 = new ExportCompany();
       rate.add(c1);
       rate.add(c2);
       rate.change(-1);
    }
}
